package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloAlumno;
import com.ipartek.formacion.gestformwww.modelo.ModeloSMS;
import com.ipartek.formacion.gestformwww.modelo.beans.Alumno;
import com.ipartek.formacion.gestformwww.modelo.beans.InformeSms;
import com.ipartek.formacion.gestformwww.modelo.beans.SMSEnviosAlumno;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author David & Borja
 */
public class EnviarSMSAlumnoAccion implements Accion {

 
    private final String visualizarcurso = "visualizar-curso-accion";
    //private final String visualizarenviarSMS = "visualizar-enviar-sms-accion";

    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        ModeloSMS modelo = (ModeloSMS) servlet.getServletContext().getAttribute("ModeloSMS");
        ModeloAlumno modeloalumno = (ModeloAlumno) servlet.getServletContext().getAttribute("ModeloAlumno");
        HttpSession sesion = request.getSession();
          AccionServlet as=(AccionServlet) servlet;
        AccionRouter router = null;
        Boolean enviarSMS = true;
        String aleatorio = (String) sesion.getAttribute("aleatorioEnviarSMS");
        ArrayList<String> errorm = new ArrayList<String>();
        ArrayList<String> mensajes = new ArrayList<String>();
        Integer curId = Integer.parseInt(request.getParameter("idCurso"));
        ArrayList<SMSEnviosAlumno> envios = new ArrayList<SMSEnviosAlumno>();
        String textoSMS = request.getParameter("textosms");
        Timestamp fecha = new Timestamp((new Date()).getTime());
        String[] idAlumnos = request.getParameterValues("idAlumno");
        String[] numeros = request.getParameterValues("telefono");
        String[] nuevos = request.getParameterValues("nuevo");
        String plantilla = request.getParameter("plantilla");
        ResourceBundle recurso = (ResourceBundle) servlet.getServletContext().getAttribute("acciones-mapeo");
        ArrayList<InformeSms> informes = new ArrayList<InformeSms>();

        if (aleatorio != null) {
            if (request.getParameter("aleatorioEnviarSMS") != null) {
                if (request.getParameter("aleatorioEnviarSMS").equals(aleatorio)) {
                    // Si se pulsa F5 o atras el aleatorio del request será igual al de la sesión.
                    // No debe enviarse el sms (ya se envió anteriormente)
                    enviarSMS = false;
                } else {
                    sesion.setAttribute("aleatorioEnviarSMS", request.getParameter("aleatorioEnviarSMS"));
                }
            }
        } else {
            sesion.setAttribute("aleatorioEnviarSMS", request.getParameter("aleatorioEnviarSMS"));
        }

        if (!Verificador.esCorrecto(textoSMS)) {
            errorm.add("error-sms-no-valido");
        }
        for (int i = 0; i < idAlumnos.length; i++) {
            if (numeros[i].isEmpty()) {
                continue;
            }
            if (!Verificador.esCorrecto(numeros[i])) {
                errorm.add("error-telefono-no-valido");
            }
        }
        if (!errorm.isEmpty()) {
            enviarSMS = false;
        }

        if (sesion.getAttribute("usuario") != null && curId != null && request.getMethod().equalsIgnoreCase("POST")) {
            if (enviarSMS) {
                if (request.getParameterValues("idAlumno") != null) {
                    for (int i = 0; i < idAlumnos.length; i++) {
                        SMSEnviosAlumno envio = new SMSEnviosAlumno();
                        envio.setIdAlumno(idAlumnos[i]);
                        envio.setMovil(numeros[i]);
                        envio.setMovilNuevo(nuevos[i]);
                        envio.setIdCurso(curId);
                        envio.setMensaje(textoSMS);
                        envio.setFechaHora(fecha);
                        envio.setSMSMendID(plantilla);
                        envios.add(envio);
                    }
                    for (SMSEnviosAlumno envioaux : envios) {
                        Alumno alumno=null;
                        InformeSms informe = new InformeSms();
                        try {
                            alumno = modeloalumno.visualizarAlumno(envioaux.getIdAlumno(), envioaux.getIdCurso());
                            modelo.enviarSMS(envioaux, recurso);
                            if (envioaux.getIdRespuesta()==5){
                                informe.setIsEnviado(true);
                            }
                            // Mensaje enviado ok
                        } catch (GestorFormacionExcepcion ex) {
                            Logger.getLogger(EnviarSMSAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            errorm.add(ex.getMessage());
                        }
                        informe.setNombre(alumno.getAluNom());
                        informe.setApellidos(alumno.getAluApe1() + " " + alumno.getAluApe2());
                        informe.setTelefono(envioaux.getMovil());
                        informe.setRespuestaEnvio(envioaux.getObservaciones());
                        informe.setSmsEnviado(envioaux.getMensaje());
                        informes.add(informe);
                    }
                    request.setAttribute("contenido", "visualizar-informe-sms");
                    request.setAttribute("informe", informes);
                    sesion.setAttribute("mensajes", mensajes);
                    request.setAttribute("errores", errorm);
                    request.setAttribute("idCurso", curId);
                    router = new AccionRouter("principal");
                } else {
                    request.setAttribute("errores", "error-no-sms");
                    try {
                        router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarcurso),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(EnviarSMSAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(EnviarSMSAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(EnviarSMSAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
         
                }
            } else {
                request.setAttribute("errores", errorm);
                try {
                    router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarcurso),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(EnviarSMSAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (InstantiationException ex) {
                    Logger.getLogger(EnviarSMSAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(EnviarSMSAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        } else {
            router = new AccionRouter("inicio");
        }

        return router;
    }

    
}
